package eu.smoothit.sis.controller.iop;

import java.util.List;

/**
 * A structure for holding the configuration parameters for the IoP.
 * See IoP design document for more details.
 * 
 * @author Sergios Soursos, Intracom Telecom
 */
public class ConfigParams {
	
	/**
	 * The operation mode of the IoP.
	 */
	protected String mode;
	
	/**
	 * A flag denoting whether the IoP shoudl connect to remote peers or not.
	 */
	protected boolean remotes;
	
	/**
	 * The number of unchoking slots per swarm.
	 */
	protected int slots;
	
	/**
	 * The list with the IP ranges of the local addresses.
	 */
	protected List<IPRange> localIPRanges;
	
	/**
	 * The time period (in seconds) to ask the SIS for new torrent statistics.
	 */
	protected int t;
	
	/**
	 * Lower bound for upload bandwidth (in Mbit/s).
	 */
	protected float ulow;
	
	/**
	 * Lower bound for download bandwidth (in Mbit/s).
	 */
	protected float dlow;
	
	/**
	 * The total upload bandwidth (in Mbit/s).
	 */
	protected float u;
	
	/**
	 * The total download bandwidth (in Mbit/s).
	 */
	protected float d;
	
	/**
	 * The percentage (%) of old swarms the IoP will keep participating in.
	 */
	protected float x;

	public String getMode() {
		return mode;
	}

	public void setMode(String mode) {
		this.mode = mode;
	}

	public boolean isRemotes() {
		return remotes;
	}

	public void setRemotes(boolean remotes) {
		this.remotes = remotes;
	}

	public int getSlots() {
		return slots;
	}

	public void setSlots(int slots) {
		this.slots = slots;
	}

	public List<IPRange> getLocalIPs() {
		return localIPRanges;
	}

	public void setLocalIPRangess(List<IPRange> localIPRanges) {
		this.localIPRanges = localIPRanges;
	}

	public int getT() {
		return t;
	}

	public void setT(int t) {
		this.t = t;
	}

	public float getUlow() {
		return ulow;
	}

	public void setUlow(float ulow) {
		this.ulow = ulow;
	}

	public float getDlow() {
		return dlow;
	}

	public void setDlow(float dlow) {
		this.dlow = dlow;
	}

	public float getU() {
		return u;
	}

	public void setU(float u) {
		this.u = u;
	}

	public float getD() {
		return d;
	}

	public void setD(float d) {
		this.d = d;
	}

	public float getX() {
		return x;
	}

	public void setX(float x) {
		this.x = x;
	}
	
	

}
